<?php
date_default_timezone_set("PRC");

require 'vendor/autoload.php';
// 引入公共函数
require 'common.php';


// 命令行参数变量
$console = array();
if (preg_match_all('/--(\w+)(=(.*?)(?=\s--|$))?/u', implode(' ', array_slice($_SERVER['argv'] /*获取命令行参数的完整字符串*/, 1)), $matches)) {
    $console = [];
    for ($i = 0; $i < count($matches[0]); $i++) {
        $key = $matches[1][$i];
        $value = $matches[3][$i];
        $console[$key] = $value;
    }

    // 兼容缩写控制器和方法名
    if (isset($console['C'])) {
        if (empty($console['controller']) && !empty($console['C'])) {
            $console['controller'] = $console['C'];
        }
        unset($console['C']);
    }
    if (isset($console['A'])) {
        if (empty($console['action']) && !empty($console['A'])) {
            $console['action'] = $console['A'];
        }
        unset($console['A']);
    }
}

// 判断是否要获取使用方法
if (isset($console['help']) || isset($console['H'])) {
    $errMsg = array(
        'help:',
        '  as => php index.php --controller=Index --action=index',
        'OR',
        '  as => php index.php --c=Index --a=index',
        '',
        ''
    );
    die(implode(PHP_EOL.PHP_EOL, $errMsg));
}

// 设置默认值
$console = array_merge([
    'controller'    => 'index',
    'action'        => 'index'
], $console);
// 首字母大写
$console['controller'] = ucfirst($console['controller']);


use think\facade\Db;
use Extend\facade\Config;


// 将命令行参数注入到config
Config::set('console', $console);
// 数据库配置信息设置（全局有效）
Db::setConfig(Config::get('database'));


$className = "App\\controller\\{$console['controller']}";
try {
    if (class_exists($className)) {
        // 创建类的实例
        $app = new $className();
        // 判断是否有该方法
        if (method_exists($app, $console['action']) && is_callable(array($app , $console['action']))) {
            // 调用类的方法
            $result = call_user_func(array($app, $console['action']));
            print_r($result);
            die();
        }
    }
    die('控制器或方法不存在');
}
catch(Exception $e) {
    print_r($e->getMessage());
}
